js new 函数名 和 函数名()调用函数的区别

您所在的位置:网站首页 js 函数名不确定的调用 js new 函数名 和 函数名()调用函数的区别

js new 函数名 和 函数名()调用函数的区别

2024-07-09 19:52| 来源: 网络整理| 查看: 265

若不使用new 函数名 方式调用函数,则就是普通的函数调用;若函数中没有返回值,则普通的函数调用将毫无意义;

        简要事例如下:

               var person = new Person();                    // person的值为一个对象

               但是: 

               var person = Person ();                              // 若Person函数无返回值,则person的值为undefined

       具体事例如下:

函数没有用return返回信息       

【事例一】

              

function Person (name, age) { this.name = name; this.age = age; this.sayName = function () { this.alert(this.name); } } // 此时为构造函数,产生的person对象是由解析器产生的 var person = new Person(lily, 22); var person1 = Person(lucy, 24); person.sayName(); // 此时会弹出弹框lily person1.sayName(); // person1的值为undefined(因为函数本身没有return语句),故此时将会报错 此时的sayName是由window调用的; 修改如下: window.sayName(); // lucy sayName可用window调用的原因:当Person(lucy, 24)执行时,该方法的对象变成了window。this指向了 window;故可以用window对象调用该方法    函数用return返回了信息:

    如果函数返回的是基本数据类型(Number、string,Boolean等)时,new函数将返回一个该函数的实例对象;

    而如果函数返回一个引用类型(Object, array, function)时,new函数与直接嗲用函数产生的结果相同

  事例二:(返回基本数据类型)

function Test () { this.name = 'test' return 'test' } var test = new Test(); //test为object对象,该对象包含一个name属性和返回了一个test var test1 = Test(); //Test()属于一个fuction对象,它只返回了一个字符串test,故test1为 test字符串

 事例三:(返回引用数据类型)

function Person(name,age) { var o = new Object(); o.name = name; o.age = age; o.getName = function() { alert(this.name); } return o; } var obj1 = new Person("liwen",25); var obj2 = Person("liwen1",25); obj1.getName(); //liwen*/ new一个函数的实例对象 obj2.getName(); //liwen1*/ 直接调用 //这里new一个函数的对象和直接调用函数产生的结果相同

总结:

构造函数不需要显示返回值。

          使用new创建对象(调用构造函数)时,若return的是基本数据类型回忽略返回值;

                                                                            若return 的是对象,则返回该对象;

javascript中new对象的过程:

  如:    var myObj = newPerson(“aty”,25);

1.创建一个空的Object对象.var myObj = new Object();

2.将构造函数Person中this指向刚创建的myObj对象

3.将创建的myObj的__proto__指向构造函数Person的prototype。[这一步是建立对象和原型直接的对应关系。firefox下通过

                           对象的__proto__属性能够访问到原型,IE下则没有暴露出相应的属性。]

4.执行构造函数Person()中的代码



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3